build.gradle实践之buildConfigField

AndroidStudio进行开发,其中很重要的一个文件就是build.gradle,在项目开发中我们经常需要将同一变量在不同环境下(release,debug,test)赋予不同的值,手动更改不仅容易出错且费时,我们可以通过buildTypes节点下使用buildConfigField来解决,在项目的编译阶段根据不同的环境给BuildConfig里面变量赋值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
buildTypes {
release {
minifyEnabled true
multiDexKeepFile file('maindexlist.txt')
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
shrinkResources true
buildConfigField("boolean", 'IS_DEBUG', "false")
buildConfigField("String", 'SERVE_URL', releaseProps.getProperty("server_url"))
buildConfigField("String", 'RONG_CLOUD_APP_KEY', releaseProps.getProperty("rong_cloud_app_key"))
buildConfigField("String", 'BUGLY_APP_ID', releaseProps.getProperty("bugly_app_id"))
buildConfigField("String", 'CUSTOMER_SERVICE_ID', releaseProps.getProperty("customer_service_id"))
buildConfigField("String", 'MI_PUSH_APP_ID', releaseProps.getProperty("mi_push_app_id"))
buildConfigField("String", 'MI_PUSH_APP_KEY', releaseProps.getProperty("mi_push_app_key"))
buildConfigField("String", 'roomId', releaseProps.getProperty("room_id"))
buildConfigField("String", 'WILDDOG_URL', releaseProps.getProperty("wilddog_url"))
buildConfigField("String", 'TEMPLATE_TABLE_URL', releaseProps.getProperty("template_table_url"))
buildConfigField("String", 'TALKING_DATA_APP_ID', releaseProps.getProperty("talking_data_app_id"))
}
debug {
debuggable true
minifyEnabled false
multiDexKeepFile file('maindexlist.txt')
signingConfig signingConfigs.debug
buildConfigField("boolean", 'IS_DEBUG', "true")
buildConfigField("String", 'SERVE_URL', debugProps.getProperty("server_url"))
buildConfigField("String", 'RONG_CLOUD_APP_KEY', debugProps.getProperty("rong_cloud_app_key"))
buildConfigField("String", 'BUGLY_APP_ID', debugProps.getProperty("bugly_app_id"))
buildConfigField("String", 'CUSTOMER_SERVICE_ID', debugProps.getProperty("customer_service_id"))
buildConfigField("String", 'MI_PUSH_APP_ID', debugProps.getProperty("mi_push_app_id"))
buildConfigField("String", 'MI_PUSH_APP_KEY', debugProps.getProperty("mi_push_app_key"))
buildConfigField("String", 'roomId', debugProps.getProperty("room_id"))
buildConfigField("String", 'WILDDOG_URL', debugProps.getProperty("wilddog_url"))
buildConfigField("String", 'TEMPLATE_TABLE_URL', debugProps.getProperty("template_table_url"))
buildConfigField("String", 'TALKING_DATA_APP_ID', debugProps.getProperty("talking_data_app_id"))
}

在Project下添加不同环境变量的配置,例如release.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
keystroe_file=./keystore/xxx.jks
keystroe_storePassword=xxxxxxx
keystroe_keyAlias=xxxx
keystroe_keyPassword=xxxxxxx
server_url="https://api.xyb.com/v1/"
rong_cloud_app_key="xxxxxx"
bugly_app_id="xxxxx"
customer_service_id="xxxxxxx"
mi_push_app_id="xxxxx"
mi_push_app_key="xxxxx"
room_id="xx-xx"
wilddog_url="https://xxx.xxx.com"
template_table_url="http://xxxxxx"

可以看到在上面指定了一个key为IS_DEBUG的field,在release type下为false,在debug type下为true,具体在代码中就可以这样使用。

1
2
3
4
5
if(BuildConfig. IS_DEBUG){
........
}else{
........
}

可以看到在build.gradle中设置的属性IS_DEBUG,在这里可以直接通过BuildConfig这个类进行访问,此时就可以动态的控制处理逻辑,这里当然可以指定更多的关键字,自己根据项目需求发挥即可。

热评文章